13214
13082
현재 XML 풍미에 대한 기본 파서를 작성 중입니다. 연습으로 LL 테이블 기반 파서를 구현하고 있습니다.
다음은 BNF 문법의 예입니다.
% 토큰 이름 데이터 문자열
%% / * LL (1) * /
doc : elem
elem : "<"open_tag
open_tag : 이름 속성 close_tag
close_tag : ">"elem_or_data ""
| "/>"
;
elem_or_data : "<"open_tag elem_or_data
| 데이터 elem_or_data
| / * 엡실론 * /
;
attr : 이름 ":"문자열 attr
| / * 엡실론 * /
;
이 문법이 맞습니까?
각 터미널 리터럴은 따옴표 사이에 있습니다. 추상 터미널은 % token으로 지정됩니다.
내 입력을 토큰 목록으로 변환하기 위해 손으로 쓴 어휘 분석기를 코딩하고 있습니다. 추상 터미널을 어떻게 토큰 화합니까? 
고전적인 접근 방식은 가능한 각 터미널에 대해 정규식 (또는 다른 인식기)을 작성하는 것입니다.
완벽하게 구체적인 "추상"터미널이라고 부르는 것은 실제로 연관된 패턴이 둘 이상의 가능한 입력 문자열을 인식하는 터미널입니다. 실제로 인식 된 문자열 (또는 해당 문자열의 일부 계산 된 함수)은 토큰의 의미 값으로 파서에 전달되어야합니다.
명목상 입력 문자열의 각 지점에서 토크 나이 저는 모든 인식기를 실행하고 가장 일치하는 인식기를 선택합니다. (이것은 소위 "최대 뭉크"규칙입니다.) 이것은 특히 모든 패턴이 정규 표현식 인 경우 일반적으로 최적화 될 수 있습니다. 예를 들어 (F) lex는 이러한 최적화를 수행합니다.
귀하의 경우 복잡한 점은 언어의 토큰 화가 상황에 따라 다르다는 것입니다. 특히 대상이 elem_or_data 인 경우 가능한 토큰은 <,